/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.Paciente;
import desarrollosoft.ghce.entidades.Plantilla;
import desarrollosoft.ghce.servicio.interfaces.IServicioHistorial;
import desarrollosoft.ghce.soporte.SecurityUtil;
import desarrollosoft.ghce.vista.interfaces.Avisable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.zkoss.bind.BindContext;
import org.zkoss.bind.Converter;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Window;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraVentanaConfirmacionPedidoEstudio {

    @WireVariable("servicioHistorial")
    IServicioHistorial servicioHistorial;
    
    private List<Plantilla> listaPlantillasAconfirmar;
    private List<Plantilla> listaPlantillasCorrectas;
    private List<Plantilla> listaPlantillasConfirmadas;
    private Paciente paciente;
    private Avisable avisable;
    private String nombreUsuarioActual;
    
    @Init
    public void inicializar() {
        Execution ejecucion = Executions.getCurrent();
        listaPlantillasAconfirmar = (List<Plantilla>) ejecucion.getArg().get("listaPlantillasConfirmar");
        listaPlantillasCorrectas = (List<Plantilla>) ejecucion.getArg().get("listaPlantillasCorrectas");
        paciente = (Paciente) ejecucion.getArg().get("paciente");
        avisable = (Avisable) ejecucion.getArg().get("avisable");
        
        nombreUsuarioActual = SecurityUtil.getUserName();
        listaPlantillasConfirmadas = new ArrayList<>();
        for (Plantilla plantilla : listaPlantillasAconfirmar) {
            plantilla.setPedido(false); // seteo todas las plantillas a confirmar como no pedidas
            plantilla.setFechaUltimoPedido(servicioHistorial.obtenerFechaUltimoPedidoEstudio(plantilla, paciente));
        }
    }
    
    @Command("checkearon")
    public void checkearonAlguno(
            @BindingParam("checkeado") boolean checkeado,
            @BindingParam("plantilla") Plantilla plantilla) {
        
        if (checkeado) { // si marcaron
            if (!listaPlantillasConfirmadas.contains(plantilla)) {
                listaPlantillasConfirmadas.add(plantilla);
            }
        } else { // si desmarcaron
            if (listaPlantillasConfirmadas.contains(plantilla)) {
                listaPlantillasConfirmadas.remove(plantilla);
            }
        }
    }
    
    @Command("guardar")
    public void clickBotonAceptar(@BindingParam("ventana") Window ventana) {
        try {
            servicioHistorial.crearEstudios(listaPlantillasConfirmadas, paciente, nombreUsuarioActual);
        } catch (Exception ex) {
            Messagebox.show(ex.toString());
            return;
        }
        avisable.seCerroVentanaHija(null);
        ventana.detach();
    }
    
    public Converter getConversorFecha() {
        Converter conversorFecha = new Converter() {

            String patron = "dd/MM/yyyy";
            SimpleDateFormat formateador = new SimpleDateFormat(patron);
            
            @Override
            public Object coerceToUi(Object value, Component component, BindContext ctx) {
                Date fecha = (Date) value;
                return formateador.format(fecha);
            }

            @Override
            public Object coerceToBean(Object value, Component component, BindContext ctx) {
                // NO ES NECESARIO, se usa solo para lectura
                return value;
            }
            
        };
        return conversorFecha;
    }

    public List<Plantilla> getListaPlantillasAconfirmar() {
        return listaPlantillasAconfirmar;
    }

    public List<Plantilla> getListaPlantillasCorrectas() {
        return listaPlantillasCorrectas;
    }
    
    
}
